/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.fifa.informacion_mundialista.controllers;

import com.stefanini.informacion_mundialista.ejbs.EquipoManager;
import com.stefanini.informacion_mundialista.ejbs.EquipoManagerBMT;
import com.stefanini.informacion_mundialista.ejbs.GrupoManager;
import com.stefanini.informacion_mundialista_data.entities.Equipo;
import com.stefanini.informacion_mundialista_data.entities.Grupo;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;


/**
 *
 * @author gbuitrago
 */
@Named(value = "equiposAdminController") // se coloca la primera en mayuscula para no confundirlo con la clase
@SessionScoped
public class EquiposAdminController implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
     private Equipo equipo;

    @EJB
    private EquipoManager equipoManager;
    
    @EJB
    private GrupoManager grupoManager;
    
    @EJB
    private EquipoManagerBMT equipoManagerBTM;
    
    private List<Grupo> grupos;
   
    private List<Equipo> equipos;  

    private boolean realizarConsulta = true;
    private boolean isEdit = false;
    
    private Integer grupoIdFiltro;

   
    public void initCreate(){
        equipo = new Equipo();
        equipo.setGrupoId(new Grupo());
        isEdit = false;
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect("/informacion_mundialista/pages/equipos/equiposEdit.xhtml");
        } catch (IOException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, "Error al redireccionar", ex);
        }
    }
    
    public void initCreate(Grupo grupo){
        equipo = new Equipo();
        equipo.setGrupoId(grupo);
        grupoIdFiltro = grupo.getId();
        isEdit = false;
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect("/informacion_mundialista/pages/equipos/equiposEdit.xhtml");
        } catch (IOException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, "Error al redireccionar", ex);
        }
    }
    
    public void initEdit(Equipo equipoEdit) {
        this.equipo = equipoEdit;
        isEdit = true;
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect("/informacion_mundialista/pages/equipos/equiposEdit.xhtml");
        } catch (IOException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, "Error al redireccionar", ex);
        }
    }
    
    public void guardarEquipo(){
    
        FacesContext ctx = FacesContext.getCurrentInstance();
        
        if(!isEdit && equipoManager.verificarEquipoExistente(equipo.getNombre())) {
            ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error",
                    "Ya existe un equipo con el nombre ingresado"));
        }
        else{
            
            int res = equipoManager.validarEquipos(equipo.getCabezaSerie(), equipo.getGrupoId().getId());
            
            if(res == 0){
                if(equipoManager.guardarEquipo(equipo, isEdit)){
                    ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info",
                    "Equipo creado exitosamente"));
                
                    realizarConsulta = true;

                    try {
                        ctx.getExternalContext().redirect("/informacion_mundialista/pages/equipos/equiposAdmin.xhtml");
                    } catch (IOException ex) {
                        Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE,"Error al redireccionar",ex);
                    }
                }else{
                    ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error",
                            "Error al crear el grupo"));
                }
            } else if (res == 1) {
                ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error",
                    "Ya existe una cabeza de serie para el grupo"));
            } else if (res == 2) {
                ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error",
                    "Falta uina cabeza de serie para el grupo"));
            } else if (res == 3) {
                ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error",
                    "El grupo no permite mas equipos"));
            } else {
                ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error",
                    "Error al validar el grupo"));
            }
        }
    }
    
    public void eliminaEquipo(Equipo equipo){
        
        FacesContext ctx = FacesContext.getCurrentInstance();
        
        if(equipoManagerBTM.eliminarEquipo(equipo))
        {
           ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info",
                    "Equipo eliminado exitosamente")); 
           realizarConsulta = true;
           consultarEquipos();
        }else{
            ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error",
                    "Error al eliminar el equipo"));
        }
        
        
    }
    
    
    public void consultarEquipos(){
        if(realizarConsulta) {
            equipos = equipoManager.getAllEquipos(grupoIdFiltro);
            grupos = grupoManager.getAllGrupos();
            realizarConsulta = false;
        }
    }
    
    public void realizarConsulta() {
        realizarConsulta = true;
        consultarEquipos();
    }
    
    /**
     * @return the grupo
     */
    public Equipo getEquipo() {
        return equipo;
    }

    public void setEquipo(Equipo equipo) {
        this.equipo = equipo;
    }
    
    public List<Equipo> getEquipos() {
        return equipos;
    }

    public void setEquipos(List<Equipo> equipos) {
        this.equipos = equipos;
    }
    
    public List<Grupo> getGrupos() {
        return grupos;
    }

    public void setGrupos(List<Grupo> grupos) {
        this.grupos = grupos;
    }

    public Integer getGrupoIdFiltro() {
        return grupoIdFiltro;
    }

    public void setGrupoIdFiltro(Integer grupoIdFiltro) {
        this.grupoIdFiltro = grupoIdFiltro;
    }
}
